home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1997 #1
/
Amiga Plus CD - 1997 - No. 01.iso
/
pd
/
programmierung
/
installproged
/
sasc_support
/
sources
/
projectrun.c
< prev
Wrap
C/C++ Source or Header
|
1996-03-11
|
2KB
|
121 lines
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <workbench/startup.h>
#include <dos/dostags.h>
int main(int argc,char *argv[])
{
struct WBStartup s;
char buffer[300],
*p;
FILE *file;
short trovato,
wb;
struct WBArg arg[1];
struct MsgPort *Port,
*MyPort;
BPTR Code,
fileinout;
int stack;
if (!stricmp(argv[1],"CLI")) wb=FALSE;
else if (!strcmp(argv[1],"WB")) wb=TRUE;
else exit(5);
stack=atoi(argv[2]);
stack=max(4000,stack);
if (!(file=fopen("SCOPTIONS","r"))) exit(5);
trovato=FALSE;
while((!feof(file))&&(!trovato))
{
fgets(buffer,sizeof(buffer)-1,file);
if (!strncmp(buffer,"PROGRAMNAME=",12)) trovato=TRUE;
}
fclose(file);
if (!trovato) exit(5);
strcpy(buffer,buffer+12);
if (buffer[0]) buffer[strlen(buffer)-1]='\0';
if (!wb)
{
/***** Esegui il comando *****/
strcat(buffer," ");
if (file=fopen("PrjArguments","r"))
{
fgets(buffer+strlen(buffer),sizeof(buffer)-1,file);
fclose(file);
}
p=argv[3];
if (!p) p="CON://///AUTO/WAIT/CLOSE";
if (!(fileinout=Open(p,MODE_NEWFILE)))
exit(5);
SystemTags(buffer,
SYS_Input, fileinout,
SYS_Output, NULL,
SYS_Asynch, TRUE,
NP_StackSize, stack,
TAG_END);
}
else
{
arg[0].wa_Name=buffer;
if (!(MyPort=CreateMsgPort())) exit(5);
if (!(Code=LoadSeg((UBYTE*)buffer)))
{
DeleteMsgPort(MyPort);
exit(5);
}
if (!(arg[0].wa_Lock=Lock((UBYTE*)"",ACCESS_READ)))
{
UnLoadSeg(Code);
DeleteMsgPort(MyPort);
exit(5);
}
if (!(Port=CreateProc((UBYTE*)buffer,0,Code,stack)))
s.sm_Message.mn_Node.ln_Succ=NULL;
s.sm_Message.mn_Node.ln_Pred=NULL;
s.sm_Message.mn_Node.ln_Type=NT_MESSAGE;
s.sm_Message.mn_Node.ln_Pri=0;
s.sm_Message.mn_Node.ln_Name=NULL;
s.sm_Message.mn_ReplyPort=MyPort;
s.sm_Message.mn_Length=sizeof(struct WBStartup);
s.sm_Process=Port;
s.sm_Segment=Code;
s.sm_NumArgs=1;
s.sm_ToolWindow=NULL;
s.sm_ArgList=arg;
PutMsg(Port,(struct Message *)&s);
WaitPort(MyPort);
while(GetMsg(MyPort));
UnLoadSeg(Code);
DeleteMsgPort(MyPort);
UnLock(arg[0].wa_Lock);
}
exit(0);
}